using SharpGraphT.Event;

namespace SharpGraphT.Traverse;

public interface IGraphIterator<TV, TE> : IEnumerator<TV>
    where TE : class, new() {
    bool IsCrossComponentTraversal { get; }

    event EventHandler<ConnectedComponentTraversalEventArgs>
        ConnectedComponentFinished;

    event EventHandler<ConnectedComponentTraversalEventArgs>
        ConnectedComponentStarted;

    event EventHandler<EdgeTraversalEventArgs<TE>> EdgeTraversed;

    event EventHandler<VertexTraversalEventArgs<TV>> VertexTraversed;

    event EventHandler<VertexTraversalEventArgs<TV>> VertexFinished;
}